#include "mainwindow.h"

#include <QApplication>
#include <QStandardItemModel>
// #include <QStandardItem> // 不加也是可以的哦
#include <QPixmap> // 图像
#include <QDebug>
#include <QTreeView> // 树形显示
#include <QListView> // 列表显示

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // MainWindow w;
    // w.show();

    // 创建标准 itemModel
    QStandardItemModel model;
    // 创建模型根项，根项不可见
    QStandardItem* parentItem = model.invisibleRootItem();

    // 获取模型根项，图标和工具显示
    QStandardItem* item0 = new QStandardItem();
    item0->setText("item0");
    QPixmap pixmap0(50, 50);
    pixmap0.fill(Qt::red);
    item0->setIcon(pixmap0);
    item0->setToolTip("indexA");
    parentItem->appendRow(item0);
    // 将新的项设置为父节点
    parentItem = item0;

    // 基于新的父节点 item0 下设置新的两个同层次的节点 item1 和 item2
    // 如果下面的 parentItem = item1 不注释的话，那么 item2 就相当于是在 item1 目录下
    QStandardItem* item1 = new QStandardItem();
    item1->setText("item1");
    QPixmap pixmap1(50, 50);
    pixmap1.fill(Qt::blue);
    item1->setIcon(pixmap1);
    item1->setToolTip("indexB");
    parentItem->appendRow(item1);
    // parentItem = item1;

    QStandardItem* item2 = new QStandardItem();
    item2->setData("item2", Qt::EditRole);
    QPixmap pixmap2(50, 50);
    pixmap2.fill(Qt::green);
    item2->setData(QIcon(pixmap2), Qt::DecorationRole);
    item2->setData("indexc", Qt::ToolTipRole);
    parentItem->appendRow(item2);

    // 取出根节点QModelIndex() 第 0 行 0 列的模型索引(QModelIndex)
    QModelIndex indexA = model.index(0, 0, QModelIndex());
    qDebug() << "model indexA row count is " << model.rowCount(indexA) << Qt::endl;

    // 获取 indexA 节点下 0 行 0 列
    QModelIndex indexB = model.index(0, 0, indexA);
    qDebug() << "indexB text is " << model.data(indexB, Qt::EditRole).toString() << Qt::endl;
    qDebug() << "indexB icon is " << model.data(indexB, Qt::DecorationRole) << Qt::endl;
    qDebug() << "indexB tool tip is " << model.data(indexB, Qt::ToolTipRole).toString() << Qt::endl;

    // 用树形模型 show 出来
    QTreeView view;
    view.setModel(&model);
    view.show();

    return a.exec();
}
